home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / csrc1.arc / E.C < prev    next >
C/C++ Source or Header  |  1989-07-27  |  1KB  |  66 lines

  1.  
  2. /*
  3.  * e.c  Computes e to some extraordinary number of places.
  4.  */
  5.  
  6. /*)BUILD
  7. */
  8.  
  9. #include <stdio.h>
  10.  
  11. main(argc, argv)
  12. char **argv;
  13. {
  14.     register int    i, n;
  15.     int        lim;
  16.     int        nterms;
  17.     int        j;
  18.     register int    *vec;
  19.  
  20.     if (argc > 1) {
  21.         nterms = atoi(argv[1]);
  22.         if (argc > 2) {
  23.             lim = atoi(argv[2]);
  24.         }
  25.         else {
  26.             fprintf(stderr, "usage %s nterms limit\n", argv[0]);
  27.             fprintf(stderr, ".. limit set to nterms (%d)\n",
  28.                     nterms);
  29.             lim = nterms;
  30.         }
  31.     }
  32.     else {
  33.         fprintf(stderr, "usage %s nterms limit\n", argv[0]);
  34.         fprintf(stderr, ".. nterms and limit set to 100\n");
  35.         nterms = lim = 100;
  36.     }
  37.     put('2');
  38.     put('.');
  39.     if ((vec = calloc(nterms+1, sizeof *vec)) == NULL) {
  40.         fprintf(stderr, "Not enough memory\n");
  41.         exit(1);
  42.     }
  43.     for (i = 2; i <= nterms; ++i)
  44.         vec[i] = 1;
  45.     for (j = 1; j <= lim; ++j) {
  46.          for (n = 0, i = nterms; i >= 2; --i) {
  47.             n += vec[i] * 10;
  48.             vec[i] = n % i;
  49.             n /= i;
  50.         }
  51.         put(n+'0');
  52.     }
  53.     putchar('\n');
  54. }
  55.  
  56. put(c)
  57. {
  58.     static int count;
  59.  
  60.     if (++count >= 60) {
  61.         putchar('\n');
  62.         count = 1;
  63.     }
  64.     putchar(c);
  65. }
  66.